unit dmusuario;

{$mode objfpc}

interface

uses
  Classes, SysUtils, DB, FileUtil, LResources, ZDataset, ZSqlUpdate, fusuariocadastro;

type
  TDadosUsuario = record
    login: string;
    nome: string;
    senha: string;
  end;

  { TDataUsuario }

  TDataUsuario = class(TDataModule)
    DataUsuario: TDatasource;
    ZQueryUsuario: TZQuery;
    ZQueryUsuariologin_usuario: TStringField;
    ZQueryUsuarionome_usuario: TStringField;
    ZQueryUsuariosenha_usuario: TStringField;
    ZQueryUsuariotipo_usuario: TStringField;
    ZUpUsuario: TZUpdateSQL;
    procedure UsuarioInserir();
    procedure UsuarioAlterar();
    procedure UsuarioExcluir();
    procedure UsuarioCancelar();
    procedure UsuarioFinalizar(senha: string);
    procedure UsuarioCadastro();
    function UsuarioBuscar(): TDadosUsuario;
    procedure UsuarioAlterarSenha();
    procedure UsuarioTrocar();
    function VerificaLogin(usuario: TDadosUsuario): boolean;
    procedure ZQueryUsuarioAfterPost(DataSet: TDataSet);
    procedure ZQueryUsuarioBeforeEdit(DataSet: TDataSet);
  private
    { private declarations }
  public
    login_public, senha_public: string;
    { public declarations }
  end;

var
  DataUsuario: TDataUsuario;

implementation

uses
  fusuarioalterarsenha, fusuariobusca, ucondicoesconsulta, dmprincipal, fusuariotroca;

{ TDataUsuario }

procedure TDataUsuario.UsuarioInserir();
begin
  ZQueryUsuario.Connection.StartTransaction();
  ZQueryUsuario.Insert();
end;

procedure TDataUsuario.UsuarioAlterar();
begin
  ZQueryUsuario.Connection.StartTransaction();
  ZQueryUsuario.Edit();
end;

procedure TDataUsuario.UsuarioExcluir();
begin
  ZQueryUsuario.Connection.StartTransaction();
  ZQueryUsuario.Edit();
  ZQueryUsuario.Delete();
  ZQueryUsuario.Post();
  ZQueryUsuario.Connection.Commit();
end;

procedure TDataUsuario.UsuarioCancelar();
begin
  ZQueryUsuario.Connection.Rollback();
  ZQueryUsuario.Cancel();
  ZQueryUsuario.Refresh();
end;

procedure TDataUsuario.UsuarioFinalizar(senha: string);
begin
  ZQueryUsuario.FieldByName('senha_usuario').Value := senha;
  ZQueryUsuario.Post();
  ZQueryUsuario.Connection.Commit();
end;

procedure TDataUsuario.UsuarioCadastro();
begin
  DataPrincipal.ConsultaVazio(ZQueryUsuario, 'usuario');
  FormUsuarioCadastro.ShowModal;
end;

function TDataUsuario.UsuarioBuscar(): TDadosUsuario;
var
  usuario: TDadosUsuario;
begin
  FormUsuarioBusca.ShowModal();
  if (not ZQueryUsuario.IsEmpty) then
  begin
    usuario.login := ZQueryUsuario.FieldByName('login_usuario').AsString;
    usuario.nome := ZQueryUsuario.FieldByName('nome_usuario').AsString;
    usuario.senha := ZQueryUsuario.FieldByName('senha_usuario').AsString;
  end;
  Result := usuario;
  ZQueryUsuario.Active := True;
end;

procedure TDataUsuario.UsuarioAlterarSenha();
begin
  FormUsuarioAlterarSenha.ShowModal();
end;

procedure TDataUsuario.UsuarioTrocar();
begin
  FormUsuarioTrocar.ShowModal();
end;

function TDataUsuario.VerificaLogin(usuario: TDadosUsuario): boolean;
var
  condicoes: TCondicoesConsulta;
begin
  condicoes := TCondicoesConsulta.Create(CON_AND);
  condicoes.Add('login_usuario', usuario.login);
  condicoes.Add('senha_usuario', usuario.senha);
  DataPrincipal.ConsultaCondicoes(ZQueryUsuario, 'usuario', condicoes);
  if (not ZQueryUsuario.IsEmpty) then
  begin
    Result := True;
  end
  else
  begin
    Result := False;
  end;
end;

procedure TDataUsuario.ZQueryUsuarioAfterPost(DataSet: TDataSet);
begin
  FormUsuarioCadastro.EditSenha.Enabled := False;
  FormUsuarioCadastro.EditConferir.Enabled := False;
end;

procedure TDataUsuario.ZQueryUsuarioBeforeEdit(DataSet: TDataSet);
begin
  FormUsuarioCadastro.EditSenha.Enabled := True;
  FormUsuarioCadastro.EditConferir.Enabled := True;
end;

initialization
  {$I dmusuario.lrs}

end.
